package com.yourenbang.lingyun.transaction.web.service.pay;

import com.alipay.api.AlipayClient;
import com.github.binarywang.wxpay.service.WxPayService;
import com.yourenbang.lingyun.constants.enums.pay.PayFromEnum;
import com.yourenbang.lingyun.core.model.vo.PageVO;
import com.yourenbang.lingyun.domain.PayChannel;
import com.yourenbang.lingyun.transaction.web.domain.dto.pay.*;
import com.yourenbang.lingyun.transaction.web.domain.po.TSPayType;
import com.yourenbang.lingyun.transaction.web.domain.po.TsPayChannel;

import java.util.List;
import java.util.Map;

public interface PayTypeService {

    /**
     * app获取支付方式
     */
    List<TSPayType> payType(PayTypeDTO dto);

    /**
     * 支付方式-列表
     */
    PageVO<TSPayType> list(PayTypeListDTO dto);

    /**
     * 获取支付宝客户端
     * @param payFrom 支付场景
     */
    AlipayClient getAlipayClient(PayFromEnum payFrom);

    /**
     * 获取支付宝客户端
     * @param payChannelId 支付通道
     */
    AlipayClient getAlipayClientByChannel(Integer payChannelId);

    /**
     * 获取支付宝客户端
     * @param paramMap 支付参数
     */
    AlipayClient getAlipayClientByParamMap(Map<String, String> paramMap);

    /**
     * 获取支付宝证书路径
     */
    String queryAlipayCertPath(Map<String, String> paramMap);

    /**
     * 获取微信客户端
     * @param payFrom 支付场景
     */
    WxPayService getWxPayService(PayFromEnum payFrom);

    /**
     * 获取微信客户端
     * @param payChannelId 支付通道
     */
    WxPayService getWxPayServiceByChannel(Integer payChannelId);

    /**
     * 支付方式-保存
     */
    void add(PayTypeAddDTO dto);

    /**
     * 支付方式-修改
     */
    void update(PayTypeAddDTO dto);

    /**
     * 支付方式-删除
     */
    void delete(PayTypeDeleteDTO dto);

    /**
     * 支付方式-下拉支付通道
     */
    List<PayChannel> getChannel(GetChannelDTO dto);

    /**
     * 支付通道-列表
     */
    PageVO<TsPayChannel> channelList(PayChannelListDTO dto);

    /**
     * 支付通道-保存
     */
    void channelAdd(PayChannelAddDTO dto);

    /**
     * 支付通道-修改
     */
    void channelUpdate(PayChannelAddDTO dto);

    /**
     * 支付通道-删除
     */
    void channelDelete(PayChannelDeleteDTO dto);

}
